今日課程範圍
SQL Lesson 12: Order of execution of a Query
https://sqlbolt.com/lesson/select_queries_order_of_execution
SQL的查詢(Query)語法也介紹了不少
今天我們將來做個查詢語法的總複習吧
增加限定條件 WHERE + <condition>
資料不重複 DISTINCT
資料排序 ORDER BY ASC/DSEC
限制資料筆數 LIMIT 5
限制資料筆數和偏移量 LIMIT 5 OFFSET 5
查詢為/不為空值(NULL) IS NULL & IS NOT NULL
群組化 GROUP BY & HAVING
小提示:所有的字串(string)都必須要用引號括起來,目的是為了讓程式能夠區分SQL語法學與一般的文字
Function | Description |
---|---|
ABS( numeric_exp ) | Returns the absolute value of numeric_exp. |
DEGREES( numeric_exp ) | Returns the number of degrees converted from numeric_exp radians. |
PI( ) | Returns the constant value of pi as a floating-point value. |
POWER( numeric_exp, integer_exp) | Returns the value of numeric_exp to the power of integer_exp. |
ROUND( numeric_exp, integer_exp) | Returns numeric_exp rounded to integer_exp places right of the decimal point. If integer_exp is negative, numeric_exp is rounded to |integer_exp| places to the left of the decimal point. |
開始今天的練習吧
我們要找每個導演各別拍了幾部電影
相信這題對現在的你已經相當簡單了
我們只要對導演進行GROUP BY
並用COUNT()
計算電影的數目即可
SELECT Director,COUNT(Title) AS "Number of movies"
FROM movies
GROUP BY Director
我們要找出各導演執導過的電影票房總和 (含國內外)
我們知道舉凡有分組味道的查詢語句應該都離不開 GROUP BY
的用法
因此 我們一樣先用GROUP BY
對導演分組
接著你會發現我們需要的票房資料並沒有紀錄在 “Movies” 這張表上
票房的資料是紀錄在 “Boxoffice” 表中
還記得我們前面要怎麼關聯表格進行查詢嗎?
沒錯 我們需要用到 JOIN
語法
接著我們觀察一下他們有共同的電影id進行關聯
所以可以使用
LEFT JOIN Boxoffice ON id = Movie_id
我們需要計算國內外的票房總和
因此需要將兩者相加
Domestic_sales + International_sales
因為是各別導演的票房總和
最後需要用 SUM()
來求出總和
SUM(Domestic_sales + International_sales)
所以再整理一下語法 就如下方所示囉
SELECT Director, SUM(Domestic_sales + International_sales) AS "total sales" FROM movies
LEFT JOIN Boxoffice ON id = Movie_id
GROUP BY Director
今天就先到這邊
我們明天將學習新的部分